// 数据库相关的代码
console.log(1);

let mongoose = require("mongoose");
// 数据库地址
//
let url = "mongodb://127.0.0.1:27017/2306";
mongoose
  .connect(url)
  .then((r) => {
    console.log("数据库 链接成功");
  })
  .catch((err) => {
    console.log(err, "链接失败");
  });

//用户表

// 定义的表解构
let userSchema = new mongoose.Schema(
  {
    //定义一个表的字段 和字段的值类型--表头
    username: {
      type: String,
      unique: true,
    },
    password: String,
    sex: String,
    age: Number,
    headImgUrl: String,
    // 是否能用
    isEnable: {
      type: Boolean,
      default: true,
    },
  },
  {
    // 启用时间戳-- 当创建了一个用户信息，会给表中自动增加两个字段
    // 创建时间-修改时间
    timestamps: true,
  }
);

// 创建一个表的操作 模型-（构造函数）
// 参数是表名 和表结构
let User = mongoose.model("user", userSchema);

// 定义的表解构

let ArticleSchema = new mongoose.Schema(
  {
    //定义一个表的字段 和字段的值类型--表头

    // 文章的标题
    title: {
      type: String,
    },
    // 文章的内容
    content: String,
    // 文章的浏览量
    views: {
      type: Number,
      default: 0,
    },
    //作者的id
    author_id: {
      type: mongoose.Schema.ObjectId,
    },
    //文章类型
    type: {
      type: String,
      default: "",
    },
    // 封面图
    coverImg: {
      type: String,
    },
    // 价格
    price: {
      type: Number,
    },
    // 是否能用
    isEnable: {
      type: Boolean,
      default: true,
    },
  },
  {
    // 启用时间戳-- 当创建了一个用户信息，会给表中自动增加两个字段
    // 创建时间-修改时间
    timestamps: true,
  }
);

// 定义的表解构  轮播图
let BannerSchema = new mongoose.Schema(
  {
    // 封面图
    coverImg: {
      type: String,
    },
    // 链接
    link: {
      type: mongoose.Schema.Types.String,
    },
    // 是否能用
    isEnable: {
      type: Boolean,
      default: true,
    },
  },
  {
    timestamps: true,
  }
);
let Banner = mongoose.model("banner", BannerSchema);

// 定义的表解构  购物车
let CartSchema = new mongoose.Schema(
  {
    // 购物车信息 所属的用户id

    uid: {
      type: mongoose.Schema.Types.ObjectId,
    },
    // 购物车信息的 商品id
    pid: {
      type: mongoose.Schema.Types.ObjectId,
      // pid 来自于 文章表的id
      ref: "article",
    },
    pnum: {
      type: Number,
      default: 1,
    },
    checked: {
      type: Boolean,
      default: false,
    },
  },
  {
    timestamps: true,
  }
);
let Cart = mongoose.model("cart", CartSchema);

// 创建一个表的操作 模型-（构造函数）
// 参数是表名 和表结构
let Article = mongoose.model("article", ArticleSchema);

// 定义的表解构  购物车
let OrdersSchema = new mongoose.Schema(
  {
    // 购物车信息 所属的用户id

    uid: {
      type: mongoose.Schema.Types.ObjectId,
    },
    // 根据传来的 cartid -- 查询到商品详情-存入
    products: {
      type: Array,
    },
    address: {
      // 对象里面 里面 需要有  街道- 小区门牌号 - 联系人 -手机号
      type: Object,
    },
    countNum: Number,
    //
    countPirce: {
      type: Number,
      // type: mongoose.Schema.Types.ObjectId,
      // // pid 来自于 文章表的id
      // ref: "article",
    },
    // pnum: {
    //   type: Number,
    //   default: 1,
    // },
  },
  {
    timestamps: true,
  }
);
let Order = mongoose.model("order", OrdersSchema);

// 导出了数据库的操作模型
module.exports = { User, Article, Banner, Cart, Order };

// 创建添加数据
// let u1 = new User({
//   username: "zhangsan",
//   password: "123",
// });
// // 保存数据到数据库
// u1.save()
//   .then((r) => {
//     // 成功以后返回 用户数据对象
//     console.log(r);
//     /*
//     {
//         username: 'zhangsan',
//         password: '123',
//         _id: new ObjectId("64a7bb190f07b394696c8485"),
//         createdAt: 2023-07-07T07:13:29.971Z,
//         updatedAt: 2023-07-07T07:13:29.971Z,
//         __v: 0
//         }
//     */
//   })
//   .catch((err) => {
//     console.log("用户名存在");
//   });

// for (let i = 0; i < 1000; i++) {
//   new User({ username: "zhangsan" + i, password: "123" }).save();
// }

// 删除数据
// User.deleteOne({ _id: "64a7bd3ad7ef734ee0765dc3" }).then((r) => {
//   console.log(r);
//   //   删除了 id为 xxx 的一条数据
//   //   { acknowledged: true, deletedCount: 1 }
// });

// 删除 用户名 包含1 根据条件删除--正则
// User.deleteMany({ username: /1/ }).then((r) => {
//   console.log(r);
// });

// 根据id删除
// User.findByIdAndDelete("64a7bd3ad7ef734ee0765dc6").then((r) => {
//   console.log(r);
// });

// 修改数据

// 第一个参数 对象 是一个条件
// 第二个参数对象是一个要修改的内容
// User.updateOne({ _id: "64a7bd3ad7ef734ee0765dc2" }, { password: "999" }).then(
//   (r) => {
//     console.log(r);
//   }
// );

// 根据id查询，再修改，默认返回的修改前的数据
// User.findByIdAndUpdate("64a7bd3ad7ef734ee0765dc2", { password: "888" }).then(
//   (r) => {
//     console.log(r);
//   }
// );

// User.findByIdAndUpdate(
//   "64a7bd3ad7ef734ee0765dc2",
//   { $inc: { age: 1 } },
//   { new: true } //返回 修改后的数据
// ).then((r) => {
//   console.log(r);
// });

// 查询数据

// User.findById("64a7bd3ad7ef734ee0765dc2").then((r) => {
//   console.log(r);
// });

// // 返回第一个匹配的 用户信息

// User.findOne({ _id: "64a7bd3ad7ef734ee0765dc2" }).then((r) => {
//   console.log(r);
// });

// User.findOne({ password: "123" }).then((r) => {
//   console.log(r);
// });

// User.find({ password: "123" }).then((r) => {
//   console.log(r);
// });

//搜索用户名包含2的用户信息 并且age > 1
//
// User.find({ username: /2/, age: { $gt: 1 } }).then((r) => {
//   console.log(r);
// });

// let pagesize = 20;
// let pagenum = 1;
// User.find()
//   //注册时间  -1降序  1 升序
//   .sort({ createdAt: -1 })

//   //   第一页的数据
//   //   .skip(0) //跳过几个数据
//   //   .limit(10)// 获取跳过数据后面的 数据

//   //   第二页的数据
//   //   .skip(10)
//   //   .limit(10)
//   //   第三页的数据
//   //   .skip(20)
//   //   .limit(10)

//   //分页
//   .skip((pagenum - 1) * pagesize)
//   .limit(pagesize)

//   //   返回的数据中不显示 password
//   .select({ password: 0, updatedAt: 0, __v: 0 }) //1 查询结果中出现 password 字段  0是不出现这个字段

//   //只返回用户名数据，其他数据都不显示，除了id
//   //   .select({ username: 1 }) //1 查询结果中出现 password 字段  0是不出现这个字段

//   .then((r) => {
//     console.log(r);
//   });
